const express = require('express');
const bodyParser = require('body-parser');
const iotClient = require('./iotClient');
const cors = require('cors');
const dbUtil = require('./dbUtil');

const app = express();
const port = 3001;

// 使用 body-parser 中间件解析 JSON 请求体
app.use(bodyParser.json());
app.use(cors({
  origin: 'http://localhost:3000', // 允许的源，这里设置为本地开发环境
  optionsSuccessStatus: 200 // 设置 options 请求的响应状态码
}));

//设备上线
app.post('/api/device/connect', (req, res) => {
   const data = req.body;
   console.log(`请求地址：/api/device/connect，请求参数： ${JSON.stringify(data)}`);
   iotClient.connect(data.deviceList, data.wsClientId)
   // 返回成功的报文
   res.status(200).json({
	   status: "success",
	   message: "请求成功",
	   data: null
   });
});

//设备离线
app.post('/api/device/disconnect', (req, res) => {
   const data = req.body;
   console.log(`请求地址：/api/device/disconnect，请求参数： ${JSON.stringify(data)}`);
   iotClient.disconnect(data)
   // 返回成功的报文
   res.status(200).json({
	   status: "success",
	   message: "请求成功",
	   data: null
   });
});

//设备连接状态
app.post('/api/device/connect/query', (req, res) => {
   const data = req.body;
   //console.log(`请求地址：/api/device/connect/query，请求参数： ${JSON.stringify(data)}`);
   let ret = iotClient.connected(data)
   //res.send(`${JSON.stringify(ret)}`)
   // 返回成功的报文
   res.status(200).json({
   	   status: "success",
   	   message: "请求成功",
   	   data: ret
   });
});

//上报通用事件
app.post('/api/device/reportGeneralEvent', (req, res) => {
   const data = req.body;
   console.log(`请求地址：/api/device/reportGeneralEvent，请求参数： ${JSON.stringify(data)}`);
   iotClient.reportGeneralEvent(data.deviceList, data.eventName, data.eventData, data.wsClientId)
   // 返回成功的报文
   res.status(200).json({
   	   status: "success",
   	   message: "请求成功",
   	   data: null
   });
});

//测试数据库连接
app.post('/api/db/checkConn', async (req, res) => {
   const data = req.body;
   console.log(`请求地址：/api/db/checkConnt，请求参数： ${JSON.stringify(data)}`);
   const {success, msg} = await dbUtil.checkConnection(data)
   // 返回成功的报文
   res.status(200).json({
   	   status: "success",
   	   message: msg,
   	   data: success
   });
});

//从数据库查询设备列表
app.post('/api/db/queryDevice', async (req, res) => {
   const reqData = req.body;
   console.log(`请求地址：/api/db/queryDevice，请求参数： ${JSON.stringify(reqData)}`);
   const {success, data, msg} = await dbUtil.queryDatabase(reqData.dbConfig, reqData.param)
   // 返回成功的报文
   res.status(200).json({
   	   status: success ? "success" : "failed",
   	   message: msg,
   	   data: data
   });
});



const server = app.listen(port, () => {
   console.log('Server is running on http://localhost:' + port);
});

//wobsockt 实现数据实时刷新
iotClient.initWs(server)